package day03

/**
  * 根据主构造器创建类
  * 主构造器的参数列表要放在类名的后面，和类名放在一起
  * val修饰的构造参数具有不可变性，var修饰的构造参数具有可变性
  * 此时声明的faceValue:Int 只能在本类调用，伴生对象也无法调用
  * faceValue虽然没有加val或var修饰符，默认是val
  * @param name
  * @param age
  * @param faceValue
  */
class StructDemo(val name:String,var age:Int,faceValue:Int = 90) {
  var gender : String = _

  def getFaceValue():Int ={
    faceValue
  }
  //辅助构造器
  def this(name:String ,age:Int,faceValue: Int,gender:String){
    this(name,age,faceValue)//辅助构造器第一行必需先调用主构造器
    this.gender = gender
  }
}

object StructDemo{
  def main(args: Array[String]): Unit = {
    val struct: StructDemo = new StructDemo("zhangsan",26)
//    struct.name = "1123"  val修饰的是不能修改值
    println(struct.age)
    println(struct.name)
//    println(struct.faceValue)  不用val或var修饰是不能访问
    println(struct.getFaceValue())

    val struct1 = new StructDemo("lisi",20,99,"男")
    println("*****************************")
    println(struct1.name)
    println(struct1.age)
    println(struct1.getFaceValue())
    println(struct1.gender)
  }
}
